# ============================================================
# * Copyright © hk. 2022-2025. All rights reserved.
# * File name: CMakeLists.txt
# * Author   : 苏木
# * Date     : 2025-05-22
# * Version  : 
# * Description: cmake version 3.16.3
# ============================================================
## https://cmake.com.cn/cmake/help/latest/guide/tutorial/index.html
## https://cmake.org/cmake/help/latest/

# 指定 CMake 的最低版本要求
# --------------------------------------------------
cmake_minimum_required(VERSION 3.10)


# 设置项目名称和使用的编程语言
# --------------------------------------------------
project(SPROJECT C)


# 指定可执行程序和源文件
# --------------------------------------------------
add_executable(app_demo.out main.c)

# find_package包含模块(此命令可以包含第三方库)
# --------------------------------------------------
# find_package(PackageName)
# 以这种方式使用时，除其行为与include()相似，CMake将搜索名为FindPackageName的文件，而不是PackageName.cmake。
# 通过这种方法，外部包的详细信息可以引入到构建中，包括导入的目标、定义相关文件、库或程序位置的变量、关于可选组件的信息、
# 版本信息等等。

message(STATUS "[USER:TOP]==> ${CMAKE_VERSION} 使用自定义模块 sumu")
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/Modules")
find_package(sumu REQUIRED)
if(SUMU_FOUND)
    # 打印找到的Git信息
    message(STATUS "[USER:TOP]found sumu package  : ${SUMU_PACK_NAME}")
    message(STATUS "[USER:TOP]sumu package Version: ${SUMU_VERSION}")
else()
    message(FATAL_ERROR "[USER:TOP]sumu package not found!")
endif()
message("")

# Tips 1: 有哪些模块可用？命名规则？
# --------------------------------------------------
# (1)cmake中会为我们提供一些常用的模块，会放在cmake的安装目录中：cmake_install_path/share/cmake-<version>/Modules
# (2)cmake支持的Module列表：https://cmake.org/cmake/help/latest/manual/cmake-modules.7.html
# (3)find_package查找的文件名：
# 							Find<PackageName>.cmake
# 							<PackageName>Config.cmake
# 							<lowercasePackageName>-config.cmake
# 							<lowercasePackageName>-config-version.cmake # 指定版本信息
# 							<PackageName>ConfigVersion.cmake # 指定版本信息

# Tips 2: Module模式与Config模式(https://cmake.org/cmake/help/latest/command/find_package.html)
# --------------------------------------------------
# find_package对我们来说是一个黑盒子，那么它是具体通过什么方式来查找到我们依赖的库文件的路径的呢?
# (1)Module模式中，cmake需要找到一个叫做Find<LibraryName>.cmake的文件。这个文件负责找到库所在的路径，
#    为我们的项目引入头文件路径和库文件路径。cmake搜索这个文件的路径有两个，一个是cmake安装目录下的
#    share/cmake-<version>/Modules目录，另一个是我们指定的 CMAKE_MODULE_PATH 的所在目录。
# (2)Config模式中，主要通过<LibraryName>Config.cmake or <lower-case-package-name>-config.cmake
#    这两个文件来引入我们需要的库。
